package com.example.pt.entity;

/**
 * 用户等级枚举
 * 根据积分范围定义不同的用户等级
 */
public enum UserLevel {
    
    /**
     * 注册新人 (-999,-1]
     */
    REGISTERED(0, "注册新人", -999, -1, 2),
    
    /**
     * 普通用户 (-1,100]
     */
    NORMAL(1, "普通用户", -1, 100, 5),
    
    /**
     * 活跃用户 (100,1500]
     */
    ACTIVE(2, "活跃用户", 100, 1500, 10),
    
    /**
     * 资深用户 (1500,5000]
     */
    SENIOR(3, "资深用户", 1500, 5000, 40),
    
    /**
     * 核心用户 (5000,10000]
     */
    CORE(4, "核心用户", 5000, 10000, 100),
    
    /**
     * 站点元老 (10000,+∞)
     */
    ELDER(5, "站点元老", 10000, Integer.MAX_VALUE, Integer.MAX_VALUE);
    
    /**
     * 等级ID
     */
    private int id;
    
    /**
     * 等级名称
     */
    private String name;
    
    /**
     * 积分下限(包含)
     */
    private int minPoints;
    
    /**
     * 积分上限(包含)
     */
    private int maxPoints;
    
    /**
     * 允许收藏的种子数量
     */
    private int maxFavorites;
    
    UserLevel(int id, String name, int minPoints, int maxPoints, int maxFavorites) {
        this.id = id;
        this.name = name;
        this.minPoints = minPoints;
        this.maxPoints = maxPoints;
        this.maxFavorites = maxFavorites;
    }
    
    /**
     * 根据积分获取对应等级
     * @param points 用户积分
     * @return 用户等级
     */
    public static UserLevel getLevelByPoints(int points) {
        for (UserLevel level : UserLevel.values()) {
            if (points > level.minPoints && points <= level.maxPoints) {
                return level;
            }
        }
        // 默认返回注册新人
        return REGISTERED;
    }
    
    /**
     * 根据等级ID获取等级
     * @param levelId 等级ID
     * @return 用户等级
     */
    public static UserLevel getLevelById(int levelId) {
        for (UserLevel level : UserLevel.values()) {
            if (level.id == levelId) {
                return level;
            }
        }
        // 默认返回注册新人
        return REGISTERED;
    }
    
    /**
     * 判断是否可以兑换邀请码
     * 只有等级大于等于3（资深用户）才能兑换邀请码
     * @return 是否可以兑换邀请码
     */
    public boolean canExchangeInvitation() {
        return this.id >= SENIOR.id;
    }
    
    /**
     * 判断是否可以发表评论
     * 只有等级大于等于1（普通用户）才能发表评论
     * @return 是否可以发表评论
     */
    public boolean canComment() {
        return this.id >= NORMAL.id;
    }
    
    public int getId() {
        return id;
    }
    
    public String getName() {
        return name;
    }
    
    public int getMinPoints() {
        return minPoints;
    }
    
    public int getMaxPoints() {
        return maxPoints;
    }
    
    public int getMaxFavorites() {
        return maxFavorites;
    }
} 